import { createRouter, createWebHistory } from 'vue-router';
import { ElMessage } from 'element-plus';
import userStore from '../store/userStore';
import web3Service from '../services/web3Service';

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('../views/Home.vue'),
    meta: { requiresAuth: true } // 主界面需要登录
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/Login.vue'),
    meta: { hideForAuth: true } // 已登录用户访问登录页时重定向
  },
  {
    path: '/register',
    name: 'Register',
    component: () => import('../views/Register.vue'),
    meta: { hideForAuth: true } // 已登录用户访问注册页时重定向
  },
  {
    path: '/marketplace',
    name: 'Marketplace',
    component: () => import('../views/Marketplace.vue'),
    meta: { requiresAuth: true } // 市场需要登录
  },
  {
    path: '/profile',
    name: 'Profile',
    component: () => import('../views/Profile.vue'),
    meta: { requiresAuth: true } // 需要后端登录
  },
  {
    path: '/mint',
    name: 'MintNFT',
    component: () => import('../views/MintNFT.vue'),
    meta: { requiresWallet: true } // 需要登录+绑定钱包
  },
  {
    path: '/my-collections',
    name: 'MyCollections',
    component: () => import('../views/MyCollections.vue'),
    meta: { requiresWallet: true } // 需要登录+绑定钱包
  }
];

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
});

// 路由守卫
router.beforeEach((to, from, next) => {
  const isLoggedIn = userStore.getters.isLoggedIn();
  
  console.log('🛡️ 路由守卫 - 从:', from.path, '到:', to.path);
  console.log('🛡️ 登录状态:', isLoggedIn);
  console.log('🛡️ 路由元信息:', to.meta);

  // 如果已登录用户访问登录/注册页，重定向到主页
  if (to.meta.hideForAuth && isLoggedIn) {
    console.log('✅ 已登录用户访问登录页，重定向到主页');
    next('/');
    return;
  }

  // 检查路由是否需要钱包连接（现在必须登录+绑定钱包）
  if (to.meta.requiresWallet) {
    // 第一步：检查是否登录
    if (!isLoggedIn) {
      console.log('❌ 需要登录才能访问此页面');
      ElMessage.warning('请先登录账户');
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      });
      return;
    }

    // 第二步：检查是否绑定钱包
    const user = userStore.getters.getUser();
    if (!user?.walletAddress) {
      ElMessage.warning('请先在个人中心绑定钱包');
      next('/profile');
      return;
    }

    // 第三步：检查MetaMask连接的地址是否与绑定地址一致
    const connectedAccount = web3Service.getAccount();
    if (!connectedAccount) {
      ElMessage.warning('请先连接 MetaMask 钱包');
      next('/');
      return;
    }

    // 第四步：验证钱包地址匹配（不区分大小写）
    if (connectedAccount.toLowerCase() !== user.walletAddress.toLowerCase()) {
      ElMessage.error('当前连接的钱包地址与账户绑定的地址不一致，请切换到正确的钱包');
      next('/profile');
      return;
    }

    // 全部验证通过
    next();
  } else if (to.meta.requiresAuth) {
    // 需要后端登录
    if (isLoggedIn) {
      console.log('✅ 已登录，允许访问');
      next();
    } else {
      // 未登录用户访问需要登录的页面，重定向到登录页
      console.log('❌ 未登录，重定向到登录页');
      next({
        path: '/login',
        query: { redirect: to.fullPath }
      });
    }
  } else {
    console.log('✅ 无需验证，直接放行');
    next();
  }
});

export default router;

